package org.example.day01;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @author zlxad
 * @version 1.0
 * @description: TODO+
 * 一只贪吃的猴子，来到一个果园，发现许多串香蕉排成一行，每串香蕉上有若干根香蕉。
 * 每串香蕉的根数由数组numbers给出。猴子获取香蕉，每次都只能从行的开头或者末尾获取，并且只能获取N次，求猴子最多能获取多少根香蕉
 * @date 2024/3/11 15:22
 */
public class test015 {
    public static int maxBanana(List<Integer> numbers, int N) {
        int total = 0;
        for (int num : numbers) {
            total += num; // 计算香蕉的总数
        }

        int windowSize = numbers.size() - N; // 窗口的大小，即每次获取香蕉后剩余的香蕉数量
        int windowSum = 0;
        for (int i = 0; i < windowSize; i++) {
            windowSum += numbers.get(i); // 初始窗口的香蕉数量
        }

        int minWindowSum = windowSum; // 最小窗口的香蕉数量

        // 从窗口的右侧移动窗口，更新窗口的香蕉数量，并更新最小窗口的香蕉数量
        for (int i = windowSize; i < numbers.size(); i++) {
            windowSum = windowSum - numbers.get(i - windowSize) + numbers.get(i);
            minWindowSum = Math.min(minWindowSum, windowSum);
        }

        // 返回总数减去最小窗口和，即猴子可以拿到的最大香蕉数
        return total - minWindowSum;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int length = scanner.nextInt(); // 输入数组numbers的长度
        List<Integer> numbers = new ArrayList<>();
        for (int i = 0; i < length; i++) {
            numbers.add(scanner.nextInt()); // 输入数组numbers的值
        }
        int N = scanner.nextInt(); // 输入获取的次数

        System.out.println(maxBanana(numbers, N));
    }
}
